package com.zxy.ziems.server.device.pojo.dto;

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;

/**
 * 设备关联属性
 *
 * @author 10348359
 * @create 2024-03-20 22:14
 */
@Data
public class DevicePropertyDTO<T> {
    /**
     * 主键
     */
    @NotBlank(message = "主键ID不能为空", groups = {Delete.class})
    private String id;

    /**
     * 显示名称
     */
//    @NotBlank(message = "设备类型ID不能为空", groups = {Update.class, Add.class})
    private String name;

    /**
     * 设备类型Code
     */
    @NotBlank(message = "设备ID不能为空", groups = {Update.class, Add.class, Save.class})
    private String deviceId;

    /**
     * 属性Id 关联的DataType
     */
    @NotBlank(message = "设备属性ID不能为空", groups = {Update.class, Add.class, Save.class})
    private String dataTypeId;

    /**
     * 显示的单位 关联的DataUnit
     */
    @NotBlank(message = "显示的单位ID 不能为空", groups = {Update.class, Add.class})
    private String unitId;

    /**
     * 数据的单位 关联DataUnit
     */
//    @NotBlank(message = "数据的单位ID 不能为空", groups = {Update.class, Add.class})
    private String dataUnitId;

    /**
     * 额外信息，比如 modbus配置的从站号 {"function": 3, "startAddress": 06, "quantity": 2}
     */
    private T advanced;

    /**
     * 采集时间间隔 单位毫秒 默认是1000毫秒
     */
    @Min(value = 0, message = "采集时间间隔不能为负", groups = {Update.class, Add.class, Save.class})
    private Integer collectInterval = 1000;

    /**
     * 通知方式 1是变化后通知 0是实时通知 默认是实时通知
     */
    private Integer notifyType = 0;

    public interface Add {
    }

    public interface Update {
    }

    public interface Save {
    }

    public interface Delete {
    }
}
